<?php
	class Mailer{
		
		public $bfconfig = Array (
		'sitename' => '云采购'
		);
	
		public $mail = Array (
			'state' => 1,
			'server' => 'smtp.exmail.qq.com',
			'port' => 25,
			'auth' => 1,
			'username' => 'web@smw01.com',
			'password' => 'VXeuTnmaNx53rmnY',
			'charset' => 'utf-8',
			'mailfrom' => 'web@smw01.com'
			);
		
		function sendMail($mail_to, $mail_subject, $mail_message) {
		
			//global $mail, $bfconfig;
			$bfconfig = $this->bfconfig;
			$mail = $this->mail;
			
			date_default_timezone_set('PRC');
		
			$mail_subject = '=?'.$mail['charset'].'?B?'.base64_encode($mail_subject).'?=';
			$mail_message = chunk_split(base64_encode(preg_replace("/(^|(\r\n))(\.)/", "\1.\3", $mail_message)));
		
			$headers .= "";
			$headers .= "MIME-Version:1.0\r\n";
			$headers .= "Content-type:text/html\r\n";
			$headers .= "Content-Transfer-Encoding: base64\r\n";
			$headers .= "From: ".$bfconfig['sitename']."<".$mail['mailfrom'].">\r\n";
			$headers .= "Date: ".date("r")."\r\n";
			list($msec, $sec) = explode(" ", microtime());
			$headers .= "Message-ID: <".date("YmdHis", $sec).".".($msec * 1000000).".".$mail['mailfrom'].">\r\n";
		
			if(!$fp = fsockopen($mail['server'], $mail['port'], $errno, $errstr, 30)) {
				exit("CONNECT - Unable to connect to the SMTP server");
			}
		
			stream_set_blocking($fp, true);
		
			$lastmessage = fgets($fp, 512);
			if(substr($lastmessage, 0, 3) != '220') {
				exit("CONNECT - ".$lastmessage);
			}
		
			fputs($fp, ($mail['auth'] ? 'EHLO' : 'HELO')." befen\r\n");
			$lastmessage = fgets($fp, 512);
			if(substr($lastmessage, 0, 3) != 220 && substr($lastmessage, 0, 3) != 250) {
				exit("HELO/EHLO - ".$lastmessage);
			}
		
			while(1) {
				if(substr($lastmessage, 3, 1) != '-' || empty($lastmessage)) {
		 			break;
		 		}
		 		$lastmessage = fgets($fp, 512);
			}
		
			if($mail['auth']) {
				fputs($fp, "AUTH LOGIN\r\n");
				$lastmessage = fgets($fp, 512);
				if(substr($lastmessage, 0, 3) != 334) {
					exit($lastmessage);
				}
		
				fputs($fp, base64_encode($mail['username'])."\r\n");
				$lastmessage = fgets($fp, 512);
				if(substr($lastmessage, 0, 3) != 334) {
					exit("AUTH LOGIN - ".$lastmessage);
				}
		
				fputs($fp, base64_encode($mail['password'])."\r\n");
				$lastmessage = fgets($fp, 512);
				if(substr($lastmessage, 0, 3) != 235) {
					exit("AUTH LOGIN - ".$lastmessage);
				}
		
				$email_from = $mail['mailfrom'];
			}
		
			fputs($fp, "MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $email_from).">\r\n");
			$lastmessage = fgets($fp, 512);
			if(substr($lastmessage, 0, 3) != 250) {
				fputs($fp, "MAIL FROM: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $email_from).">\r\n");
				$lastmessage = fgets($fp, 512);
				if(substr($lastmessage, 0, 3) != 250) {
					exit("MAIL FROM - ".$lastmessage);
				}
			}
		
			foreach(explode(',', $mail_to) as $touser) {
				$touser = trim($touser);
				if($touser) {
					fputs($fp, "RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $touser).">\r\n");
					$lastmessage = fgets($fp, 512);
					if(substr($lastmessage, 0, 3) != 250) {
						fputs($fp, "RCPT TO: <".preg_replace("/.*\<(.+?)\>.*/", "\\1", $touser).">\r\n");
						$lastmessage = fgets($fp, 512);
						exit("RCPT TO - ".$lastmessage);
					}
				}
			}
		
			fputs($fp, "DATA\r\n");
			$lastmessage = fgets($fp, 512);
			if(substr($lastmessage, 0, 3) != 354) {
				exit("DATA - ".$lastmessage);
			}
		
			fputs($fp, $headers);
			fputs($fp, "To: ".$mail_to."\r\n");
			fputs($fp, "Subject: $mail_subject\r\n");
			fputs($fp, "\r\n\r\n");
			fputs($fp, "$mail_message\r\n.\r\n");
			$lastmessage = fgets($fp, 512);
			if(substr($lastmessage, 0, 3) != 250) {
				exit("END - ".$lastmessage);
			}
		
			fputs($fp, "QUIT\r\n");
		
		}
		
	}
